package top.eggcode.base;

import java.util.List;
import java.util.Optional;

/**
 * 通用服务
 * Created at 2021/3/5 0:11
 *
 * @author DingJiaQi
 * @version 1.0
 */
public interface BaseService<T> {

    /**
     * 新增对象
     *
     * @param entity 对象信息
     * @return 执行结果
     */
    boolean add(T entity);

    /**
     * 物理删除
     *
     * @param entity 对象信息
     */
    void delete(T entity);

    /**
     * 物理删除
     *
     * @param id 唯一标识
     */
    void deleteById(String id);

    /**
     * 更新
     *
     * @param entity 对象信息
     */
    void update(T entity);

    /**
     * 更新全部信息
     *
     * @param entity 对象信息
     */
    void updateFull(T entity);

    /**
     * 新增或更新
     *
     * @param entity 对象信息
     */
    void put(T entity);

    /**
     * 查询全部对象
     *
     * @return 对象集合
     */
    List<T> find();

    /**
     * 查询一个对象
     *
     * @param id 主键
     * @return 对象信息
     */
    Optional<T> get(String id);

    /**
     * 批量保存
     *
     * @param entityList 对象集合
     */
    void batchPut(List<T> entityList);

    /**
     * 批量保存
     *
     * @param entityList 对象集合
     */
    void batchAdd(List<T> entityList);

    /**
     * 同步数据库，以实体为准
     */
    void flush();

    /**
     * 同步实体，以数据库为准
     *
     * @param entity 实体
     */
    void refresh(T entity);


}
